package br.grupecinc.model.entity;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Temporal;

/**
 *
 * @author Kaynan
 */
@Entity
@NamedQuery(name = "CadastroBy", query = "SELECT cadastro FROM Cadastro cadastro order by cadastro.nome")
public class Cadastro {

    @Id
    @GeneratedValue
    private int id;
    private String nome;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dataNascimento;
    private String telefone;
    private String rua;
    private int numero;
    private String bairro;
    private String cidade;
    private String cep;
    private String complemento;
    private int tipoPlano;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dataCadastro;
    private int estadoCliente;
    private int diaMensalidade;
    @OneToMany(cascade = {CascadeType.PERSIST})
    @JoinTable(name = "mensalidade_cadastro", joinColumns = @JoinColumn(name = "id_cadastro"),
    inverseJoinColumns = @JoinColumn(name = "id_mensalidade"))
    private List<Mensalidade> mensalidades;

    public Cadastro() {
    }

    public Cadastro(String nome, String dataNascimento, String telefone, String rua, int numero, String bairro, String cidade, String cep, String complemento, int tipoPlano, String dataCadastro, List<Mensalidade> mensalidades) throws ParseException {
        mensalidades = new ArrayList<>();

        this.nome = nome;
        this.dataNascimento = new SimpleDateFormat("dd/MM/yyyy").parse(dataNascimento);
        this.telefone = telefone;
        this.rua = rua;
        this.numero = numero;
        this.bairro = bairro;
        this.cidade = cidade;
        this.cep = cep;
        this.complemento = complemento;
        this.tipoPlano = tipoPlano;
        this.dataCadastro = new SimpleDateFormat("dd/MM/yyyy").parse(dataCadastro);
        this.mensalidades = mensalidades;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public Date getDataNascimento() {
        return dataNascimento;
    }

    public void setDataNascimento(String dataNascimento) throws ParseException {
        this.dataNascimento = new SimpleDateFormat("dd/MM/yyyy").parse(dataNascimento);
    }

    public String getTelefone() {
        return telefone;
    }

    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }

    public String getRua() {
        return rua;
    }

    public void setRua(String rua) {
        this.rua = rua;
    }

    public int getNumero() {
        return numero;
    }

    public void setNumero(int numero) {
        this.numero = numero;
    }

    public String getBairro() {
        return bairro;
    }

    public void setBairro(String bairro) {
        this.bairro = bairro;
    }

    public String getCidade() {
        return cidade;
    }

    public void setCidade(String cidade) {
        this.cidade = cidade;
    }

    public String getCep() {
        return cep;
    }

    public void setCep(String cep) {
        this.cep = cep;
    }

    public String getComplemento() {
        return complemento;
    }

    public void setComplemento(String complemento) {
        this.complemento = complemento;
    }

    public int getTipoPlano() {
        return tipoPlano;
    }

    public void setTipoPlano(int tipoPlano) {
        this.tipoPlano = tipoPlano;
    }

    public Date getDataCadastro() {
        return dataCadastro;
    }

    public void setDataCadastro(String dataCadastro) throws ParseException {
        this.dataCadastro = new SimpleDateFormat("dd/MM/yyyy").parse(dataCadastro);
    } 

    public int getEstadoCliente() {
        return estadoCliente;
    }

    public void setEstadoCliente(int estadoCliente) {
        this.estadoCliente = estadoCliente;
    }

    public int getDiaMensalidade() {
        return diaMensalidade;
    }

    public void setDiaMensalidade(int diaMensalidade) {
        this.diaMensalidade = diaMensalidade;
    }

    public List<Mensalidade> getMensalidades() {
        return mensalidades;
    }

    public void setMensalidades(List<Mensalidade> mensalidades) {
        this.mensalidades = mensalidades;
    }

    public void addMensalidade(Mensalidade mensalidade) {
        this.mensalidades.add(mensalidade);
    }

    public void removeMensalidade(Mensalidade mensalidade) {
        this.mensalidades.remove(mensalidade);
    }

    @Override
    public String toString() {
        return "Cadastro{" + "id=" + id + ", nome=" + nome + ", dataNascimento=" + dataNascimento + ", telefone=" + telefone + ", rua=" + rua + ", numero=" + numero + ", bairro=" + bairro + ", cidade=" + cidade + ", cep=" + cep + ", complemento=" + complemento + ", tipoPlano=" + tipoPlano + ", dataCadastro=" + dataCadastro + ", estadoCliente=" + estadoCliente + ", diaMensalidade=" + diaMensalidade + ", mensalidades=" + mensalidades + '}';
    }

}
